""" На вход программе подаются два натуральных числа nn и mm, каждое на 
отдельной строке — количество строк и столбцов в матрице. 
Далее вводятся сами элементы матрицы — слова, каждое на отдельной строке; 
подряд идут элементы сначала первой строки, затем второй, и т.д.

Напишите программу, которая считывает элементы матрицы один за другим, 
выводит их в виде матрицы, выводит пустую строку, и снова ту же матрицу, 
но уже поменяв местами строки со столбцами: первая строка выводится как первый столбец, и так далее.

Формат входных данных
На вход программе подаются два числа nn и mm — количество строк и столбцов в матрице, далее идут 
n \times mn×m слов, каждое на отдельной строке.

Формат выходных данных
Программа должна вывести считанную матрицу, за ней пустую строку, и ту же 
матрицу, но поменяв местами строки со столбцами. Элементы матрицы разделять одним пробелом. """

n=int(input())
m=int(input())
mat = list()

for i in range(n):
    tmp_l=list()
    for j in range(m):
        tmp_l.append(input())
    mat.append(tmp_l)
    
    
def mat_print(mat_l,flag):
    if flag==1:
        for i in range(n):
            print(*mat[i],end=' ')
            print()
    else:                          
        for i in range (m):
            for j in range(n):
                print(mat[j][i].rstrip(),end=' ')
            print()
    
if __name__=='__main__':
    mat_print(mat,1)
    print()
    mat_print(mat,2)